import win32gui
from win32gui import PyMakeBuffer, SendMessage, PyGetBufferAddressAndLen, PyGetString
import win32con
import win32api
classname = "Notepad"
titlename = "新建文本文档.txt - 记事本"
#获取句柄
#hwnd = win32gui.FindWindow(classname, titlename)
hwnd = 0x000010C10
# 很奇怪 官方文档这里  已经没有这个FindWindow了 全是后面有后缀的 FindWindowA  FindWindowExA等等
# 如果没有类名 可以改成 None

# 直接 print(hwnd) 会得到一串数字（以16进制形式打印 可以看到和spy++中显示的句柄号一致）
print('%#x' % hwnd )
# 如果窗口无标题栏或文本，或标题栏为空，或窗口或控制的句柄无效，则返回值为零。函数不能返回在其他应用程序中的编辑控件的文本
print(win32gui.GetWindowText(hwnd))
# 获取某个窗口的类名
print(win32gui.GetClassName(hwnd))
#获取窗口左上角和右下角坐标
left, top, right, bottom = win32gui.GetWindowRect(hwnd)

length = 100
buf = win32gui.PyMakeBuffer(length)
length2 = SendMessage(hwnd, win32con.WM_GETTEXT, length, buf)+100
print(length2)
buf = PyMakeBuffer(length2)
print('get: ', SendMessage(hwnd, win32con.WM_GETTEXT, length2, buf))
print('add: ', buf)
address, length = PyGetBufferAddressAndLen(buf)
text = PyGetString(address, length)

print('text: ', text)


"""
# 获取当前大窗体中某个已知类名 不知窗体名的组件/子窗体
child_class='AfxWnd40'
child_handle = win32gui.FindWindowEx(handle, None, child_class, None)
print('%#x' %child_handle)
# 但是FindWindowEx只会返回第一个满足条件的子窗体句柄

# 遍历输出当前父窗体下所有子窗体的句柄
child_class_list = []
win32gui.EnumChildWindows(handle, lambda handle,param:param.append(handle), child_class_list)
print(child_class_list)

# 使用GetClassName查看是否有符合条件的句柄
class_set=[]
for hwnd in child_class_list:
    hwnd_class=win32gui.GetClassName(hwnd)
    class_set.append(hwnd_class)
print(list(set(class_set)))

# 获得想要的子窗体句柄后，主要是MSFlexGridWndClass这个窗体，就可以对其进行操作

# 首先 要根据句柄获取这个对象 然后才可以对其进行调用
"""






